class MyStack<E> {
	private transient int maxSize;
	private transient Object[] stackArray;
	private int top;

	public MyStack(int s) {
		maxSize = s;
		stackArray = new Object[maxSize];
		top = -1;
	}

	public void push(E j) {
		stackArray[++top] = j;
	}

	@SuppressWarnings("unchecked")
	public E pop() {
		return (E) stackArray[top--];
	}

	@SuppressWarnings("unchecked")
	public E peek() {
		return (E) stackArray[top];
	}

	public boolean isEmpty() {
		return (top == -1);
	}

	public boolean isFull() {
		return (top == maxSize - 1);
	}

	public static void main(String[] args) {
		MyStack<Integer> theStack = new MyStack<Integer>(10);
		theStack.push(10);
		theStack.push(20);
		theStack.push(30);
		theStack.push(40);
		theStack.push(50);
		while (!theStack.isEmpty()) {
			long value = theStack.pop();
			System.out.print(value);
			System.out.print(" ");
		}
		System.out.println("");
	}
}